A typical computing system includes one or more memory modules for storing software applications and program data, and a memory controller that controls access to the memory module under the direction of a microprocessor. Conventional memory modules, such as Single Inline Memory Modules (SIMMs) and Dual Inline Memory Modules (DIMMs), must be powered up and initialized with a predefined sequence of commands in order to operate properly. Failure to follow the required procedures for power up and initialization may result in undefined operation.
Most types of memory modules are designed to comply with one or more industry standards that specify a required initialization sequence for the particular memory type. Although most manufacturers of memory modules purport to conform to these industry standards, the exact initialization sequences required by the different manufacturers often have subtle variations. Two manufacturers of the same type of memory may, for example, require initialization sequences that include the same basic commands, but in a slightly different order. In addition, the manufactures may require different timings for applying the commands to the memory being initialized. For example, one manufacture may require that a command, such as a memory pre-charge command, be applied for a slightly longer or shorter duration than another manufacturer.
Conventional memory controllers are designed to apply a static initialization sequence in which the commands have of a fixed order and time duration. In other words, a memory controller may be designed to operate with a specific manufacturer. As a result, utilization of memory modules from other manufacturers may be difficult, and may require redesign of the memory controller or use of a different memory controller altogether.
In general, the invention is directed to techniques for initializing one or more memory modules in accordance with a programmable initialization sequence. More specifically, a memory controller allows a processor or other component to programmatically select or otherwise modify the initialization sequence for the memory modules.
The memory controller may receive configuration data from the processor or another component and, based on the configuration data, outputs a sequence of commands for initializing the memory modules. As one example, the memory controller may store a plurality of predefined initialization sequences, each defining a different command sequence. Based on the configuration data, the memory controller selects one of the initialization sequences, and issues the defined commands to the memory module in the order defined by the selected sequence. By adjusting the configuration data, the processor can finely control the initialization sequence applied by the memory controller. For example, the memory controller allows the processor to specify particular bit patterns to be applied to the memory module for each command. In addition, the memory controller may control the timing, duration, and other properties of the command sequence based on the configuration data.
In one embodiment, the invention is directed to a memory controller comprising a programmable computer-readable medium that stores configuration data to control initialization of one or more memory modules. The memory controller further comprises an initialization control unit that outputs a sequence of commands to initialize the memory modules in accordance with the configuration data.
In another embodiment, the invention is directed to a method comprising selecting one of a plurality of predefined initialization sequences based on programmable configuration data, and issuing commands to initialize a memory module in accordance with the selected initialization sequence.
In another embodiment, the invention is directed to a system comprising a memory module, a programmable memory controller; and a processor to provide configuration data to the memory controller to control initialization of the memory module. The memory controller outputs a sequence of commands to initialize the memory module in accordance with the configuration data.
In another embodiment, the invention is directed to a system comprising a memory module, means for selecting a sequence of commands from a set of predefined initialization sequences, and means for initializing the memory module in accordance with the selected sequence of commands.
The invention can provide a number of advantages. In general, the programmable nature of the memory controller allows the computing system to support memory modules produced by different manufacturers, which often produce memory modules that require slightly different initialization sequences. Similarly, the memory controller may easily be reprogrammed to support future modifications, such as timing changes, or extended initialization modes.
Further, the memory controller may be reconfigured at run-time, i.e., during operation of the computer, without requiring that the system be completely powered down. The memory controller may be dynamically reprogrammed to support the new memory module in the event memory module fails. This allows a new memory module to be inserted in the system without interrupting operation of the system. Consequently, the memory controller may readily support a variety of types of memory modules without needing to be redesigned or replaced.
The details of one or more embodiments of the invention are set forth in the accompanying drawings and the description below. Other features, objects, and advantages of the invention will be apparent from the description and drawings, and from the claims.